using System;
using System.Collections.Generic;

namespace SpellCore
{
    internal interface ISpellCheckEngine
    {
        CheckingResult GetWordStatus(string word);

        bool CanSupportAdditions();

        /// <summary>
        /// Adds a word to the known good word store
        /// </summary>
        /// <param name="word"></param>
        /// <exception cref="NotSupportedException">When CanSupportAdditions is false</exception>
        void AddWordAsGood(string word);

        
        bool CanSupportBadWords();

        /// <summary>
        /// Adds a word to the known bad word store
        /// </summary>
        /// <param name="word"></param>
        /// <exception cref="NotSupportedException">When CanSupportBadWords is false</exception>
        void AddWordAsBad(string word);
        

        bool CanProvideSuggestions();

        /// <summary>
        /// Gets good words that are close to provided word
        /// </summary>
        /// <param name="word"></param>
        /// <exception cref="NotSupportedException">When CanProvideSuggestions is false</exception>
        IEnumerable<SimilarityCheckResult> GetSuggestions(string word);
    }
}